package com.four.seckill.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.four.common.utils.PageUtils;
import com.four.common.utils.R;
import com.four.common.vo.CommodityTo;
import com.four.seckill.entity.CommodityEntity;
import com.four.seckill.vo.CommodityVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Author: hxw
 * @Date: 2022/01/06/11:31
 * @Description
 */
public interface CommodityService {
    /**
     * 列表分页
     * @param page
     * @param limit
     * @return
     */
    PageUtils getList(Integer page, Integer limit);

    /**
     * 秒杀设置提交
     * @param commodityEntity
     * @return
     */
    R saveUpdCommodity(List<CommodityEntity> commodityEntity);

    /**
     * 删除秒杀缓存
     * @param id
     * @return
     */
    R deleteCommodityRedis(Integer id);

    /**
     * 商品分页模糊查
     * @param page
     * @param size
     * @param vo
     * @param catId
     * @return
     */
    IPage<CommodityEntity> commodityList(Integer page, Integer size, CommodityVo vo, Integer catId);

    /**
     * 添加商品
     * @param commodity
     */
    void addCommdity(CommodityEntity commodity);

    /**
     * 根据id删除商品
     * @param comId
     */
    void deleteById(@Param("comId") Integer comId);

    /**
     * 根据id查询商品
     * @param comId
     * @return
     */
    CommodityEntity getCommodityById(@Param("comId") Integer comId);

    /**
     * 根据id修改商品数据
     * @param commodity
     * @return
     */
    R updateCommodityById(CommodityEntity commodity);

    /**
     * 查询是否符合秒杀的商品
     * @param comId
     * @return
     */
    R commoditySeckill(Integer comId);

    /**
     * 秒杀
     * @param comId
     * @param userToken
     * @param token
     * @return
     */
    R seckillStatus(Integer comId, String userToken, String token);

    /**
     * 启动商品秒杀
     *
     * @return
     */
    R seckillList();

    /**
     * feign调用根据编号查询商品的详情
     * @param commId
     * @return
     */
    CommodityTo getByCommId(Integer commId);

    /**
     * 修改状态
     *
     * @param byCommId
     * @return
     */
    R updateByStatus(CommodityTo byCommId);

    /**
     * 接口进行防幂等
     * @param comId
     * @param userToken
     * @return
     */

    String tokenKey(Integer comId, String userToken);
}
